package pojo;

import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 购物车类
 */
@Data
public class Cart {
    // 购物总金额
    private double total;
    // 0. 计算购物总金额
    public double getTotal() {
        // 0.1 定义总金额
        double sum = 0;
        // 0.2 遍历Map集合计算总金额
        for (CartItem item : maps.values()) {
            sum += item.getNum() * item.getProduct().getPrice();
        }
        return sum;
    }

    // 1. 创建一个购物车集合
    Map<String,CartItem> maps = new HashMap<>();

    // 2. 将商品添加到购物车中
    // 思路：先要判断这件商品之前是否已经放到过购物车里面，有就数量加一，没有就添加商品
    public void add(Product product) {
        // 2.1 之前已经将这类商品放到过购物车了，所以只需要将数量加一
        if (maps.containsKey(product.getPid())){
            // 2.1.1 得到商品的购物项
            CartItem item = maps.get(product.getPid());
            // 2.1.2 购物项数量加一
            item.setNum(item.getNum() + 1);
        }
        // 2.2 第一次添加这个商品，直接将商品放入到购物车
        else {
            // 2.2.1 创建一个新的购物项
            CartItem item = new CartItem(product,1);
            // 2.2.2 将这个购物项添加到购物车中
            maps.put(product.getPid(),item);
        }

        // 2.3 统一给对应商品库存减一
        product.setQuantity(product.getQuantity() - 1);
    }

    // 3. 从购物车中删除商品
    public void remove(String pid) {
        // 3.1 根据pid得到对应购物项
        CartItem item = maps.get(pid);
        // 3.2 恢复对应商品库存
        item.getProduct().setQuantity(item.getProduct().getQuantity() + item.getNum());
        // 3.3 将此商品从购物车移除
        maps.remove(pid);
    }

    // 4. 清空购物车
    public void clear() {
        // 4.1 遍历集合，恢复所有的商品库存
        for (CartItem item : maps.values()) {
            item.getProduct().setQuantity(item.getProduct().getQuantity() + item.getNum());
        }
        // 4.2 清空购物车
        maps.clear();
    }
}
